<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

  // 作为赋值式创建函数的值：let fn = ()=>{}
  // const fn = (name)=>{
  //   return "hello " + name
  // }
  // console.log(fn("admin"));
  
  // 作为事件处理函数：document.onclick = ()=>{}
  // document.onclick = ()=>{
  //   console.log("hello")
  // }

  // 作为参数：fn( ()=>{} )
  // setTimeout(()=>{
  //   console.log("hello world");
  // }, 1000);


  // 作为返回值：function fn(){ return ()=>{} }
  // function fn(){
  //   return ()=>{
  //     console.log("hello")
  //   }
  // }
  // fn()();

  // 作为匿名函数的函数体：(()=>{})()
  // ;(()=>{
  //   console.log("hello")
  // })();

  // ==========
    
  // 有且只有一个形参时，可以省略小括号
  // const fn = name=>{
  //   return "hello " + name;
  // }
  // console.log(fn("admin"));

  // const fn = =>{
  //   return "hello " + name;
  // }
  // console.log(fn());

  // const fn = name, age=>{
  //   return "hello " + name + "," + age + "岁";
  // }
  // console.log(fn("admin", 18));
  // 有且只有一个形参时，可以省略小括号

  // =========
  
  // 有且直接返回值时，可以省略花括号和return
  // 花括号和return必须同时省略
  // const fn = name=>"hello "+name;
  // console.log(fn("admin"));

  // const fn = name=>return "hello "+name;
  // console.log(fn("admin"));
  // const fn = name=>{"hello "+name};
  // console.log(fn("admin"));

  // const fn = name=>{
  //   let str = "hello "+name;
  //   return str;
  // };
  // console.log(fn("admin"));
  
  // const fn = name=>let str = "hello " + name
  // console.log(fn("admin"));
  // 有且直接返回值时，可以省略花括号和return
  // 花括号和return必须同时省略


  // =========

  
  // 箭头函数无法绑定this，自动使用外层函数的this

  // const obj = {
  //   name:"obj",
  //   fn:()=>{
  //     console.log(this);
  //   },
  //   fun:function(){
  //     console.log(this);
  //   }
  // }
  // obj.fn();
  // obj.fun();

  // const obj = {
  //   name:"obj",
  //   fn:function(){
  //     setTimeout(()=>{
  //       console.log(this);
  //     }, 1000)
  //   }
  // }
  // obj.fn();

  // =================

  // 箭头函数不能被new执行（无法作为类使用）

  // const fn = function(){}
  // new fn();

  // const fn = ()=>{}
  // new fn();

  // ==========

  // 极简语法返回花括号对象时，需要使用小括号将花括号对象再包裹起来

  // const fn = ()=> ({name:"admin"})
  // console.log(fn());

  
  // ============


  // 不建议大范围使用，语义化差
  // 不建议用作事件处理函数，会导致无法获取事件源

  // 建议作为参数使用

  // arr.sort( (a,b)=>a-b );

  // arr.forEach( val=>console.log(val) );

  // arr.map( val=>val*1.3 );

  // arr.filter( val=>val%2 );

  // arr.some( val=>val==="5" );
  // arr.every( val=>val==="5" );

  // arr.reduce( (prev,val)=>prev+val );


</script>
</html>